package com.carpentersblocks.util.handler; import java.io.IOException; import java.util.ArrayList; import java.util.List; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.network.NetHandlerPlayServer; import net.minecraft.network.play.client.C17PacketCustomPayload; import org.apache.logging.log4j.Level; import com.carpentersblocks.CarpentersBlocks; import com.carpentersblocks.network.ICarpentersPacket; import com.carpentersblocks.network.PacketActivateBlock; import com.carpentersblocks.network.PacketEnrichPlant; import com.carpentersblocks.network.PacketSlopeSelect; import com.carpentersblocks.util.ModLogger; import cpw.mods.fml.common.eventhandler.SubscribeEvent; import cpw.mods.fml.common.network.FMLNetworkEvent.ServerCustomPacketEvent; import cpw.mods.fml.common.network.internal.FMLProxyPacket; import io.netty.buffer.ByteBuf; import io.netty.buffer.ByteBufInputStream; import io.netty.buffer.Unpooled; public class PacketHandler { private final static List<Class> packetCarrier; static { packetCarrier = new ArrayList<Class>(); packetCarrier.add(PacketActivateBlock.class); packetCarrier.add(PacketEnrichPlant.class); packetCarrier.add(PacketSlopeSelect.class); } @SubscribeEvent public void onServerPacket(ServerCustomPacketEvent event) throws IOException { ByteBufInputStream bbis = new ByteBufInputStream(event.packet.payload()); EntityPlayer entityPlayer = ((NetHandlerPlayServer) event.handler).playerEntity; int packetId = bbis.readInt(); if (packetId < packetCarrier.size()) { try { ICarpentersPacket packetClass = (ICarpentersPacket) packetCarrier.get(packetId).newInstance(); packetClass.processData(entityPlayer, bbis); } catch (Exception e) { e.printStackTrace(); } } else { ModLogger.log(Level.WARN, "Encountered out of range packet Id: " + packetId); } bbis.close(); } public static void sendPacketToServer(ICarpentersPacket packet) { ByteBuf buffer = Unpooled.buffer(); buffer.writeInt(packetCarrier.indexOf(packet.getClass())); try { packet.appendData(buffer); } catch (IOException e) { } CarpentersBlocks.channel.sendToServer(new FMLProxyPacket(new C17PacketCustomPayload(CarpentersBlocks.MODID, buffer))); } }